package com.dxf.chepter08

/**
 * 流:  stream 集合,这个集合用于存放无穷多个元素,但是这些无穷个元素不会一次性生产出来,而是需要用到多大的区间,
 *      就会动态的生产,末尾元素遵循lazy规则(即 要使用结果才进行计算)
 *
 *
 *   当对一个流执行 tail 操作时会生成一个新的数据  stream1.tail
 *
 *
 *
 *
 */
object T102_流 {


  def main(args: Array[String]): Unit = {
    /**
     *  1 stream 集合存放对象BigInt
     *  2 numsForm是自定义函数,函数名程序员指定
     *  3 创建的集合是第一个元素n,后续元素生成规则是 n+1
     *  4 后续元素生成规则可以程序员指定,如 numsForm(n*4)
     *
     *  注意:
     *    使用流集合后 last属性不能用,last取最后一个,使用会进入无线循环
     *
     * @param n
     * @return
     */
    def numsForm(n: BigInt): Stream[BigInt] = n #:: numsForm(n + 1)

//    val stream1 = numsForm(1)//(1,...)
//    println(stream1.head)//1
//    println(stream1.tail)//2
//    println(stream1)// (1,2,...)
//    println(stream1.tail.tail)
//    println(stream1)

    println(numsForm(5).map(multi _)) // (5*5,?)






  }


  def multi(x:BigInt):BigInt={
    x*x
  }


}

